class TaskQueue {
  constructor() {
    this.queue = [];
    this.isProcessing = false;
  }

  // 添加任务到队列中，自动包装成 Promise
  addTask(task) {
    this.queue.push(() => {
      if (typeof task === 'function') {
        // 如果是函数，则执行并将其结果包装为 Promise
        const result = task();
        return Promise.resolve(result);
      } else {
        // 如果不是函数（例如直接传递了一个值），则立即解析的 Promise
        return Promise.resolve(task);
      }
    });
    this.processQueue();
  }

  // 开始处理队列中的任务
  processQueue() {
    if (this.isProcessing || this.queue.length === 0) return;

    this.isProcessing = true;
    const task = this.queue.shift(); // 取出队列的第一个任务

    // 执行任务，并等待其完成
    task()
      .then((result) => {
        // console.log('Task completed with result:', result);
      })
      .catch(error => {
        console.error('Task failed:', error);
      })
      .finally(() => {
        // 无论成功失败，都继续处理下一个任务
        this.isProcessing = false;
        this.processQueue();
      });
  }
}

export default TaskQueue;